home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / cpphtp2 / code.jar / code / ch07 / fig07_09.txt < prev    next >
Text File  |  1998-02-27  |  4KB  |  117 lines

  1. 1   // Fig. 7.9: employ1.h
  2. 2   // An employee class
  3. 3   #ifndef EMPLOY1_H
  4. 4   #define EMPLOY1_H
  5. 5   
  6. 6   class Employee {
  7. 7   public:
  8. 8      Employee( const char*, const char* );  // constructor
  9. 9      ~Employee();                       // destructor
  10. 10     const char *getFirstName() const;  // return first name
  11. 11     const char *getLastName() const;   // return last name
  12. 12  
  13. 13     // static member function
  14. 14     static int getCount();  // return # objects instantiated
  15. 15  
  16. 16  private:
  17. 17     char *firstName;
  18. 18     char *lastName;
  19. 19  
  20. 20     // static data member
  21. 21     static int count;  // number of objects instantiated
  22. 22  };
  23. 23  
  24. 24  #endif
  25. 25  // Fig. 7.9: employ1.cpp
  26. 26  // Member function definitions for class Employee
  27. 27  #include <iostream.h>
  28. 28  #include <string.h>
  29. 29  #include <assert.h>
  30. 30  #include "employ1.h"
  31. 31  
  32. 32  // Initialize the static data member
  33. 33  int Employee::count = 0;
  34. 34  
  35. 35  // Define the static member function that
  36. 36  // returns the number of employee objects instantiated.
  37. 37  int Employee::getCount() { return count; }
  38. 38  
  39. 39  // Constructor dynamically allocates space for the
  40. 40  // first and last name and uses strcpy to copy
  41. 41  // the first and last names into the object
  42. 42  Employee::Employee( const char *first, const char *last )
  43. 43  {
  44. 44     firstName = new char[ strlen( first ) + 1 ];
  45. 45     assert( firstName != 0 );   // ensure memory allocated
  46. 46     strcpy( firstName, first );
  47. 47  
  48. 48     lastName = new char[ strlen( last ) + 1 ];
  49. 49     assert( lastName != 0 );    // ensure memory allocated
  50. 50     strcpy( lastName, last );
  51. 51  
  52. 52     ++count;  // increment static count of employees
  53. 53     cout << "Employee constructor for " << firstName
  54. 54          << ' ' << lastName << " called." << endl;
  55. 55  }
  56. 56  
  57. 57  // Destructor deallocates dynamically allocated memory
  58. 58  Employee::~Employee()
  59. 59  {
  60. 60     cout << "~Employee() called for " << firstName
  61. 61          << ' ' << lastName << endl;
  62. 62     delete firstName;  // recapture memory
  63. 63     delete lastName;   // recapture memory
  64. 64     --count;  // decrement static count of employees
  65. 65  }
  66. 66  
  67. 67  // Return first name of employee
  68. 68  const char *Employee::getFirstName() const
  69. 69  {
  70. 70     // const before return type prevents client modifying
  71. 71     // private data. Client should copy returned string before
  72. 72     // destructor deletes storage to prevent undefined pointer.
  73. 73     return firstName;
  74. 74  }
  75. 75  
  76. 76  // Return last name of employee
  77. 77  const char *Employee::getLastName() const
  78. 78  {
  79. 79     // const before return type prevents client modifying
  80. 80     // private data. Client should copy returned string before
  81. 81     // destructor deletes storage to prevent undefined pointer.
  82. 82     return lastName;
  83. 83  }
  84. 84  // Fig. 7.9: fig07_09.cpp
  85. 85  // Driver to test the Employee class
  86. 86  #include <iostream.h>
  87. 87  #include "employ1.h"
  88. 88  
  89. 89  int main()
  90. 90  {
  91. 91     cout << "Number of employees before instantiation is "
  92. 92          << Employee::getCount() << endl;   // use class name
  93. 93  
  94. 94     Employee *e1Ptr = new Employee( "Susan", "Baker" );
  95. 95     Employee *e2Ptr = new Employee( "Robert", "Jones" );
  96. 96  
  97. 97     cout << "Number of employees after instantiation is "
  98. 98          << e1Ptr->getCount();
  99. 99  
  100. 100    cout << "\n\nEmployee 1: "
  101. 101         << e1Ptr->getFirstName()
  102. 102         << " " << e1Ptr->getLastName()
  103. 103         << "\nEmployee 2: "
  104. 104         << e2Ptr->getFirstName()
  105. 105         << " " << e2Ptr->getLastName() << "\n\n";
  106. 106 
  107. 107    delete e1Ptr;   // recapture memory
  108. 108    e1Ptr = 0;
  109. 109    delete e2Ptr;   // recapture memory
  110. 110    e2Ptr = 0;
  111. 111 
  112. 112    cout << "Number of employees after deletion is "
  113. 113         << Employee::getCount() << endl;
  114. 114 
  115. 115    return 0;
  116. 116 }
  117.